package com.example.ftp.Dao;

import com.example.ftp.Beans.Document;
import org.apache.commons.net.ftp.FTPFile;

import java.io.IOException;
import java.util.List;

public interface FtpDao {

    /**
     * 得到所有目录
     * @param ftpPath FTP服务器中文件所在路径
     * @return 返回目录数组
     */
    FTPFile[] listFiles(String ftpPath);

    /**
     * 得到当前工作目录下的所有文件夹和文件的详细信息
     * @return
     */
    List<Document> getWorkingDirectoryDocuments();

    /**
     * 获得对应服务器路径下的文件，默认使当前服务端目录转移至此文件目录
     * @param ftpPath 服务器路径
     */
    FTPFile getFTPFile(String ftpPath);

    /**
     * 从FTP服务器下载文件
     *  @param ftpPath FTP服务器中文件所在路径 格式： ftptest/aa
     * @param localPath 下载到本地的位置 格式：H:/download
     * @return boolean
     */
    boolean downloadFile(String ftpPath, String localPath);

    /**
     * 返回上层目录
     * @return boolean
     */
    boolean changeToParentDirectory();


    /**
     * 上传文件或文件夹
     *
     * @param ftpPath    服务端路径
     * @param localPath   客户端文件路径
     * @param isCoverDirectory 文件夹已存在是否覆盖，是则删除重建，否则不删
     * @param isCoverFile      文件已存在是否覆盖，是则删除重建，否则不删
     * @throws Exception
     */
    boolean upload(String ftpPath, String localPath, boolean isCoverDirectory, boolean isCoverFile) throws Exception;

    /**
     * 删除文件
     * @param filePath 要删除的文件路径
     * @return
     */
    boolean deleteFile(String filePath);


    /**
     * 删除文件夹
     * @param directoryPath 要删除的文件夹的路径
     * @return
     */
    boolean deleteDirectory(String directoryPath) throws IOException;

    /**
     * 创建目录
     * @param ftpPath ftp服务端路径
     * @return
     */
    boolean makeDirectory(String ftpPath) throws IOException;

    /**
     * 重命名
     * @param oldPath ftp旧名字文件
     * @param newPath ftp新名字文件
     * @return 是否修改名字成功
     */
    boolean replaceName(String oldPath, String newPath) throws IOException;

    /**
     * 设置文件属性是否为隐藏
     */
    void setHiddenDocument(boolean flag);
}
